package com.wande.dataplatform.service;

import com.wande.common.mybatis.core.page.PageQuery;
import com.wande.common.mybatis.core.page.TableDataInfo;
import com.wande.dataplatform.domain.bo.SystemConfigBo;
import com.wande.dataplatform.domain.vo.SystemConfigVO;

import java.util.List;
import java.util.Map;

/**
 * 系统配置服务接口
 *
 * @author wande
 */
public interface ISystemConfigService {

    /**
     * 查询系统配置列表
     *
     * @param bo 查询条件
     * @param pageQuery 分页参数
     * @return 系统配置列表
     */
    TableDataInfo<SystemConfigVO> queryPageList(SystemConfigBo bo, PageQuery pageQuery);

    /**
     * 查询系统配置列表
     *
     * @param bo 查询条件
     * @return 系统配置列表
     */
    List<SystemConfigVO> queryList(SystemConfigBo bo);

    /**
     * 根据ID查询系统配置
     *
     * @param id 配置ID
     * @return 系统配置
     */
    SystemConfigVO queryById(Long id);

    /**
     * 根据配置键查询配置值
     *
     * @param configKey 配置键
     * @return 配置值
     */
    String getConfigValue(String configKey);

    /**
     * 根据配置类型查询配置
     *
     * @param configType 配置类型
     * @return 配置列表
     */
    List<SystemConfigVO> queryByType(String configType);

    /**
     * 新增系统配置
     *
     * @param bo 系统配置
     * @return 是否成功
     */
    Boolean insertByBo(SystemConfigBo bo);

    /**
     * 修改系统配置
     *
     * @param bo 系统配置
     * @return 是否成功
     */
    Boolean updateByBo(SystemConfigBo bo);

    /**
     * 批量更新配置
     *
     * @param configs 配置列表
     * @return 是否成功
     */
    Boolean batchUpdate(List<SystemConfigBo> configs);

    /**
     * 删除系统配置
     *
     * @param ids 配置ID列表
     * @return 是否成功
     */
    Boolean deleteByIds(List<Long> ids);

    /**
     * 验证配置
     *
     * @param configType 配置类型
     * @return 验证结果
     */
    Map<String, Object> validateConfig(String configType);

    /**
     * 测试Doris连接
     *
     * @return 测试结果
     */
    Map<String, Object> testDorisConnection();

    /**
     * 测试DolphinScheduler连接
     *
     * @return 测试结果
     */
    Map<String, Object> testDolphinSchedulerConnection();

    /**
     * 导出配置
     *
     * @param configType 配置类型
     * @return 配置JSON
     */
    String exportConfig(String configType);

    /**
     * 导入配置
     *
     * @param configJson 配置JSON
     * @return 是否成功
     */
    Boolean importConfig(String configJson);

    /**
     * 刷新配置缓存
     */
    void refreshCache();
}
